package com.jv.webmvc;

import org.apache.catalina.Context;
import org.apache.catalina.startup.Tomcat;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

/**
 * 前段时间看Tomcat源码在这排上用场了
 * 为了在Spring工程中调试SpringMVC代码，使用Tomcat的插件，需要模拟一下SpringBoot内嵌Tomcat
 * 为什么要这么做？？？因为我这里完全是建立的一个Java工程，根本web.xml文件，因此需要写代码给Tomcat添加Context\Servlet、与Spring web 上下文绑定
 */
@Configuration
@ComponentScan("com.jv.webmvc")
public class WebMvcMain{
	public static void main(String[] args) {
		try {
			//实例化一个Spring web 上下文
			AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
			ac.register(WebMvcMain.class);
			ac.refresh();

			//实例化Spring的DispatcherServlet DispatcherServlet与上下文绑定
			DispatcherServlet dispatcherServlet = new DispatcherServlet(ac);

			//实例化Tomcat
			Tomcat tomcat = new Tomcat();
			tomcat.setPort(8080);

			//Tomcat添加Servlet
			Context context = tomcat.addContext("/ct", "f:\\data\\spring-tomcat\\app");
			Tomcat.addServlet(context, "st", dispatcherServlet);
			context.addServletMapping("/", "st");

			//启动Tomcat
			tomcat.start();
			tomcat.getServer().await();
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}
